package com.example.threadLocalLearning;

public class TL2 {

    /**
     * 两个不同的ThreadLocal实例
     * 每个线程都有自己的 ThreadLocalMap（线程私有）；
     * 这个 ThreadLocalMap 的设计是用来存 多个不同的 ThreadLocal 实例 所对应的值；
     * 所以 一个线程可以同时使用多个 ThreadLocal 实例，每个实例都可以有自己的值。
     */
    private static final ThreadLocal<String> userName = new ThreadLocal<>();
    private static final ThreadLocal<Integer> userAge = new ThreadLocal<>();

    /**
     * | Key (ThreadLocal 实例)  | Value         |
     * |------------------------|---------------|
     * | userName               | "Alice"       |
     * | userAge                | 25            |
     * 问题	                                答案
     * 一个线程中存储的 ThreadLocal 数据有几个？	取决于你用多少个 ThreadLocal 实例
     * 每个 ThreadLocal 存一个值？	            是的，每个 ThreadLocal 实例对应一个键值对
     * 所有这些键值对存在哪里？	                当前线程的 ThreadLocalMap 中
     * 不是一个 ThreadLocal 里面存多个值，而是一个线程中可以使用多个 ThreadLocal，每个维护一个值。
     */
    public static void main(String[] args) {

        Thread thread = new Thread(() -> {
            userName.set("tangruojie");
            userAge.set(18);

            System.out.println("用户名：" + userName.get());
            System.out.println("年龄:" + userAge.get());

            userName.remove();
            userAge.remove();

            System.out.println("用户名：" + userName.get());
            System.out.println("年龄:" + userAge.get());
        });

        thread.start();

    }
}
